/* Autore: Nicola Agosti */
/*
Scrivi un programma C per individuare il numero di spazi in un stringa (massimo 100 caratteri) e la loro posizione.
*/

#define _CRT_SECURE_NO_WARNINGS /* Necessario se utilizziamo Visual Studio */

#include <stdio.h>
#include <stdlib.h>

#define MAX_CARATTERI 100

int main()
{
	/*
	Il tipo di dato "char": si usa quando si vuole creare una variabile o un vettore contenente caratteri.
	Il tipo "char" memorizza i caratteri attraverso il corrispondente codice ASCII, un numero intero, e ciò
	permette quindi di eseguire tutte le usuali operazioni aritmetiche anche sulle variabili di tipo 'char'.

	Una variabile di tipo "char" permette di memorizzare un solo carattere se, invece, voglio memorizzare una
	stringa (sequenza di più caratteri) devo utilizzare un vettore. 
	
	N.B. Nel linguaggio C a tutte le stringhe viene aggiunto un carattere, il '\0', che indica il termine
	della stringa.
	*/
	char stringa[MAX_CARATTERI + 1];
	int i, numSpazi = 0, posSpazi[MAX_CARATTERI];
	
	/* 
	La funzione "fgets" legge una riga, cioè una sequenza di caratteri (compresi gli spazi).
	La lettura termina quando si va a capo attraverso la pressione del tasto "Invio/Enter" della tastiera.
	Il numero massimo di caratteri letti è uguale al valore indicato come secondo parametro meno 1.
	Il primo parametro è il vettore di caratteri in cui si vuole memorizzare la riga.
	Il terzo parametro è SEMPRE uguale a "stdin".
	*/
	printf("Inserisci una frase: ");
	fgets(stringa, MAX_CARATTERI + 1, stdin);

	/*
	Scorro la stringa fino a quando non ho raggiunto il carattere '\0' (fine stringa)
	
	Ho inserito il carattere '\0' tra apici singoli perchè voglio "tradurre" il carattere
	nel suo codice ASCII in modo da poterlo confrontare con il contenuto della cella del vettore "stringa".
	*/
	for (i = 0; stringa[i] != '\0'; i++)
	{
		/*
		Se ho trovato uno spazio:
		  1) salvo la posizione dello spazio nel vettore "posSpazi";
		  2) incremento il contatore degli spazi "numSpazi".
		*/
		if (stringa[i] == ' ')
		{
			posSpazi[numSpazi] = i;
			numSpazi++;
		}
	}

	/* Visualizzo i risultati */
	if (numSpazi == 0)
	{
		printf("\nNella frase NON sono presenti spazi.");
	}
	else
	{
		if (numSpazi == 1)
		{
			printf("\nNella frase e\' presente %d spazio in posizione: ", numSpazi);
		}
		else
		{
			printf("\nNella frase sono presenti %d spazi in posizione: ", numSpazi);
		}

		for (i = 0; i < numSpazi; i++)
		{
			printf("%d ", posSpazi[i] + 1);
		}
	}
	
	return 0;
}